package com.lqk.demo.concurrencytools.threadpool.executors;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author lqk
 * @date 2022/1/7 14:19
 *
 * 固定大小的线程池
 *
 * 特点
 *  核心线程数 == 最大线程数（没有救急线程被创建），因此也无需超时时间
 *  阻塞队列是无界的，可以放任意数量的任务
 * 评价 适用于任务量已知，相对耗时的任务
 *
 *
 * new ThreadFactory() 参数主要是给线程池起一个更好的名称
 */

@Slf4j
public class TestNewFixedThreadPool {
    public static void main(String[] args) {
        ExecutorService pool = Executors.newFixedThreadPool(2, new ThreadFactory() {
            private final AtomicInteger t = new AtomicInteger(1);
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "mypool_t"+t.getAndIncrement());
            }
        });
        pool.execute(() -> {
            log.debug("1");
        });
        pool.execute(() -> {
            log.debug("2");
        });
        pool.execute(() -> {
            log.debug("3");
        });
    }
}
